<?php
declare(strict_types=1);

namespace Common\Service;

use App\Jobs\SendReminderEmail;
use Illuminate\Support\Facades\Redis;

class RedisService
{
    /**
     * 设置缓存
     * @param $key
     * @param $value
     * @return bool
     */
    public function set($key, $value)
    {
        if (empty($key) && empty($value)) {
            return false;
        }

        return Redis::set($key, $value);
    }

    /**
     * 获取有关指定键的值
     * @param $key
     * @return bool
     */
    public function get($key)
    {
        if (empty($key)) {
            return false;
        }

        return Redis::get($key);
    }

    /**删除键
     * @param $key
     * @return bool
     */
    public function del($key)
    {
        if (empty($key)) {
            return false;
        }

        return Redis::del($key);
    }

    /**
     * 设置列表
     * @param $key
     * @param $value
     * @return bool
     */
    public function lpush($key, $value)
    {
        if (empty($key) && empty($value)) {
            return false;
        }

        return Redis::lpush($key, $value);
    }

    /**
     * 获取有关指定键的列表
     * @param $key
     * @return bool
     */
    public function lrange($key)
    {
        if (empty($key)) {
            return false;
        }

        return Redis::lrange($key, 0, 20);
    }

    /**
     * 右侧插入列
     * @param $key
     * @param $value
     * @return bool
     */
    public function rpush($key, $value)
    {
        if (empty($key) && empty($value)) {
            return false;
        }

        $result = Redis::rpush($key, $value);

        //分发队列
        //SendReminderEmail::dispatch($key)/*->delay(now()->addMinutes(1))->onConnection('redis')->onQueue($key)*/;

        return $result;
    }

    /**
     * 左侧取出并删除
     * @param $key
     * @return bool
     */
    public function lpop($key)
    {
        if (empty($key)) {
            return false;
        }

        $value = Redis::lpop($key);
        Redis::disconnect();

        return $value;
    }
}